<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // 选择排序就是依次找出最小值
    /**
     * 使用选择排序算法对数组进行升序排序。
     * 选择排序每次从未排序部分选择最小元素，与未排序部分的起始位置交换。
     *
     * @param {Array} arr - 待排序的数组
     * @returns {Array} 排序后的新数组（原始数组不会被修改）
     */
    function selectSort(arr){
        // 创建数组副本以避免修改原始数组
        const copyArr = [...arr]
        const len = copyArr.length

        // 外层循环：遍历数组直到倒数第二个元素
        for(let i = 0;i<len-1;i++){
            let minIndex = i  // 初始化当前最小值为未排序部分的第一个元素

            // 内层循环：在未排序部分中查找最小值索引
            for(let j = i + 1;j<len;j++){
                if(copyArr[j] < copyArr[minIndex]){
                    minIndex = j
                }
            }

            // 如果找到的最小值不在当前位置，交换元素
            if(minIndex !== i){
                [copyArr[i],copyArr[minIndex]] = [copyArr[minIndex],copyArr[i]]
            }
        }
        return copyArr
    }
    const unsortedArray = [5, 3, 8, 4, 2];
    const sortedArray = selectSort(unsortedArray);
    console.log(sortedArray); // 输出: [2, 3, 4, 5, 8]
</script>
</html>